package xyz.zyl2020.java8.datetime;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;

/**
 * @author ZhuYinglong
 * @date 2020/11/5 0005
 */
public class LocalDateTimeDemo {

    public static void main(String[] args) {

        // 从默认时区的系统时钟获取当前日期-时间
        LocalDateTime localDateTime1 = LocalDateTime.now();
        System.out.println("01: " + localDateTime1);

        // 通过年、月、日、时、分、秒获得 LocalDateTime 的实例
        LocalDateTime localDateTime2 = LocalDateTime.of(2020, 12, 1, 10, 11, 12);
        System.out.println("02: " + localDateTime2);

        // 通过 LocalDate 和 LocalTime 获得 LocalDateTime 的实例
        LocalDateTime localDateTime3 = LocalDateTime.of(LocalDate.now(), LocalTime.now());
        System.out.println("03: " + localDateTime3);

        // 从一个文本字符串（如 2007-12-03T10:15:30）获取一个 LocalDateTime 的实例，使用默认 DateTimeFormatter.ISO_LOCAL_DATE_TIME 格式
        LocalDateTime localDateTime4 = LocalDateTime.parse("2020-12-01T10:11:12");
        System.out.println("04: " + localDateTime4);
        // 使用特定的格式化，从文本字符串获取 LocalDateTime的实例。
        LocalDateTime localDateTime5 = LocalDateTime.parse("2020-12-01 10:11:12", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        System.out.println("05: " + localDateTime5);

        // 获取年
        System.out.println("06: " + localDateTime5.getYear());
        // 获取月
        System.out.println("07: " + localDateTime5.getMonthValue());
        // 获取日
        System.out.println("08: " + localDateTime5.getDayOfMonth());
        // 获取时
        System.out.println("09: " + localDateTime5.getHour());
        // 获取分
        System.out.println("10: " + localDateTime5.getMinute());
        // 获取秒
        System.out.println("11: " + localDateTime5.getSecond());

        // 是否在指定日期-时间之后
        System.out.println("12: " + localDateTime5.isAfter(localDateTime4));
        // 是否在指定日期-时间之前
        System.out.println("13: " + localDateTime5.isBefore(localDateTime4));
        // 是否与指定日期-时间相等
        System.out.println("14: " + localDateTime5.isEqual(localDateTime4));


        // 更改年份，并返回新的实例
        System.out.println("15: " + localDateTime5.withYear(2019));
        // 更改月份，并返回新的实例
        System.out.println("16: " + localDateTime5.withMonth(10));
        // 更改日期，并返回新的实例
        System.out.println("17: " + localDateTime5.withDayOfMonth(9));
        // 更改小时，并返回新的实例
        System.out.println("18: " + localDateTime5.withHour(12));
        // 更改分钟，并返回新的实例
        System.out.println("19: " + localDateTime5.withMinute(3));
        // 更改秒数，并返回新的实例
        System.out.println("20: " + localDateTime5.withSecond(14));

        // 年份增加指定值，并返回新的实例
        System.out.println("21: " + localDateTime5.plusYears(1));
        // 月份增加指定值，并返回新的实例
        System.out.println("22: " + localDateTime5.plusMonths(1));
        // 日期增加指定值，并返回新的实例
        System.out.println("23: " + localDateTime5.plusDays(1));
        // 小时增加指定值，并返回新的实例
        System.out.println("24: " + localDateTime5.plusHours(1));
        // 分钟增加指定值，并返回新的实例
        System.out.println("25: " + localDateTime5.plusMinutes(1));
        // 秒数增加指定值，并返回新的实例
        System.out.println("26: " + localDateTime5.plusSeconds(1));

        // 年份减去指定值，并返回新的实例
        System.out.println("27: " + localDateTime5.minusYears(1));
        // 月份减去指定值，并返回新的实例
        System.out.println("28: " + localDateTime5.minusMonths(1));
        // 日期减去指定值，并返回新的实例
        System.out.println("29: " + localDateTime5.minusDays(1));
        // 小时减去指定值，并返回新的实例
        System.out.println("30: " + localDateTime5.minusHours(1));
        // 分钟减去指定值，并返回新的实例
        System.out.println("31: " + localDateTime5.minusMinutes(1));
        // 秒数减去指定值，并返回新的实例
        System.out.println("32: " + localDateTime5.minusSeconds(1));

        // 按照指定格式返回一个字符串
        System.out.println("33: " + localDateTime5.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));

        // 获取 LocalDate 实例
        System.out.println("34: " + localDateTime5.toLocalDate());
        // 获取 LocalTime 实例
        System.out.println("35: " + localDateTime5.toLocalTime());

    }

}
